const db = wx.cloud.database()
const chatroomCollection = db.collection('chatroom')
Page({

  /**
   * 页面的初始数据
   */
  data: {
    userInfo: null,
    textInputValue:'',
    userInfo:'',
    chats:[],
    openId:'',
  },

  onGetUserInfo:function(e){
    if(e.detail.userInfo){
      this.setData({
        userInfo:e.detail.userInfo
      })
    }
  },

  onTextInput:function(e){
    this.setData({
      textInputValue:e.detail.value
    })  
  },

  onSend:function(){
    if(!this.data.textInputValue){
      return
    }
    const doc = {
      avatar: this.data.userInfo.avatarUrl,
      nickName:this.data.userInfo.nickName,
      msgTag:'text',
      textContent:this.data.textInputValue,
      sendTime:new Date(),
      sendTimeTS:Date.now(),
    }
    chatroomCollection.add({
      data:doc,
    })
    this.setData({
      textInputValue:'',
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    wx.getSetting({
      success:res=>{
        if(res.authSetting['scope.userInfo']){
          wx.getUserInfo({
            success:res=>{
              this.setData({
                userInfo:res.userInfo
              })
            }
          })
        }
      }
    })
  },

  onChange:function(snapshot){
    console.log(snapshot);
    if(snapshot.tpye === 'init'){
      this.setData({
        chats:[
          ...this.data.chats,
          ...[...snapshot.docs].sort((x,y)=>x.sendTimeTS - y.sendTimeTS)
        ]
      })
    }else{
      const chats = [...this.data.chats]
      for(const docChange of snapshot.docChanges){
        switch(docChange.queueType){
          // init初始化列表
          // update 列表中的记录内容有更新，但列表包含的记录不变
          // enqueue 记录进入列表
          // dequeue 记录离开列表

          case 'enqueue':
          chats.push(docChange.doc)
          break
        }
      }
      this.setData({
        chats:chats.sort((x,y)=>x.sendTimeTS - y.sendTimeTS)
      })
    }
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: async function () {
    chatroomCollection.watch({
      onChange:this.onChange.bind(this),
      onError(err){
        console.log(err);
      }
    })
    const {result} = await wx.cloud.callFunction({
      name:'getuser_info'
    })
    this.setData({
      openId:result.openid
    })
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    
  }
})